Univerzalni zaokrouhlovaci funkce - reseni

Otázka od: Karel Pecinka

4. 8. 2004 11:07

Zdravim,

rozsiril jsem funkci Jirky Virta o moznost zaokrouhlovat ruznymi smery a
taky napr. na padesatniky. Kdyby se to nekomu hodilo, prikladam nize.

Karel


function RoundXDec(const Cislo: Extended; Smer: Byte; DesMist: integer):
Extended;
{
  Vyznam parametru:
    Smer = 0 - zaokrouhleni podle pravidel
           1 - zaokrouhleni dolu
           2 - zaokrouhleni nahoru
           5 - zaokrouhlovana cifra ma na konci bud 0 nebo 5

    DesMist = 0 - na cela cisla
              1 - na desetiny
              2 - na setiny
             -1 - na desitky
             -2 - na stovky
             atd.
}
var
  x, y: Extended;
begin
  if Smer = 5 then dec(DesMist); // zaokrouhleni na 5 nemuze
pouzit trunc
  x := Cislo * IntPower(10, DesMist);

  case Smer of
    1: x := trunc(x); // zaokrouhledni dolu
    2: x := trunc(x + 0.99999); // zaokrouhledni nahoru
    5: begin // zaokrouhleni na padesatniky
         y := Frac(x); // vezme cast za des. carkou
         x := trunc(x);

         if (y < 0.25) then y := 0 else
           if (y >= 0.25) and (y < 0.75) then y := 0.5 else
              y := 1;
         x := x + y;
       end;
  else
    x := Round(x); // zaokrouhledni podle pravidel
  end;
  Result := x / IntPower(10, DesMist);
end;


S pozdravem

Ing. Karel Pecinka
Sofico-CZ, v. o. s.
U Vodarny 5
568 02 Svitavy

tel: +420 608 110 949
email: k.pecinka@ordis.cz
WWW: http://www.ordis.cz